//
//  UIImage+BZHelper.h
//  BZFoundation
//
//  Created by 郭艺伟 on 2017/10/1.
//  Copyright © 2017年 郭艺伟. All rights reserved.
//
#if TARGET_OS_IOS

#import <UIKit/UIKit.h>

#define compressQualityFactor  0.51f

@interface UIImage (BZHelper)
+ (UIImage *)bz_imageFileNamed:(NSString *)fileName;
+ (UIImage *)bz_scaleImage:(UIImage *)image toScale:(float)scaleSize;
+ (UIImage *)bz_reSizeImage:(UIImage *)image toSize:(CGSize)reSize;
@end

@interface UIImage (tintColor)

/**
 *    使用指定的颜色来修改一个UIImage对象的显示颜色
 *
 *    @param tintColor 需要显示成的颜色
 *
 *    @return 经过上色后的UIImage对象
 */
- (UIImage *)bz_imageWithTintColor:(UIColor *)tintColor;

/**
 *    使用指定的颜色来修改一个UIImage对象的显示颜色(支持梯度与透明度)
 *
 *    @param tintColor 需要显示成的颜色
 *
 *    @return 经过上色后的UIImage对象
 */
- (UIImage *)bz_imageWithGradientTintColor:(UIColor *)tintColor;
@end

/**
 *    UIImage扩展，实现拉伸图片的处理方案
 */
@interface UIImage (for_stretchable)

/**
 *    stretchableImageWithLeftCapWidth:topCapHeight:在ios5以上已经不建议使用，故有这个兼容方法(到原先兼容方法：方法内部自动处理1x1，或者指定下面与右面边缘距离)
 *
 *    @param capInsets 需要拉伸的图像区域
 *
 *    @return 返回经过拉伸过后的UIImage对象
 */
- (UIImage *)bz_stretchableImageWithCapInsets:(UIEdgeInsets)capInsets;
@end

@interface UIImage (Tint)
/**
 *    使用指定颜色与大小、亮度来调整实例
 *
 *    @param color 颜色
 *    @param rect  大小
 *    @param level 亮度等级
 *
 */
- (UIImage *)bz_imageWithColor:(UIColor*)color rect:(CGRect)rect level:(CGFloat)level;
@end

typedef NS_ENUM(NSInteger, BZImageCompressType) {
    BZImageCompressTypeAvatarOrigin, //将图片尺寸压缩至640x640并将图片字节数也进行一定压缩用于91U头像
    BZImageCompressTypeAvatarThumbnail, //将图片尺寸压缩至140x140并将图片字节数也进行一定压缩用于91U小头像
    BZImageCompressTypeWeiboAndIMOrigin, //将图片尺寸等比压缩至长边960并将图片字节数也进行一定压缩用于微博和IM
    BZImageCompressTypeWeiboAndIMThumbnail, //将图片尺寸等比压缩至长边200并将图片字节数也进行一定压缩用于微博和IM
    BZImageCompressTypePanorama, //全景图压缩
};


/**
 *  提供给各种场景的处理图片。
 */
@interface UIImage (imageForDifferentApplication)

/**
 *  提供给各种场景的处理图片。
 */
- (UIImage *)bz_scaleImageForScenes:(BZImageCompressType)scaleOption;

/**
 *
 */
- (NSData *)bz_dataWithScaledImageForScenes:(BZImageCompressType)scaleOption;

/**
 *    中图显示应用，使尺寸图片适应于对应的控件尺寸。
 *    @param image UIImage对象
 *    @param targetSize 目标控件尺寸
 **/
- (UIImage *)bz_imageMiddlePresent:(CGSize)targetSize;

/**
 *  根据 degree 旋转图片
 *
 *  @param image 待旋转的图片
 *  @param angle 旋转的角度， 如 M_PI / 2
 *
 *  @return 旋转后的图片
 */
+ (UIImage *)bz_rotateImage: (UIImage *)image
                     byAngle: (CGFloat)angle;

@end

#endif
